<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 流年 <liu21st@gmail.com>
// +----------------------------------------------------------------------

// 应用公共文件


/**
 * json格式输出整体调用
 * @param $data 返回的数据
 * @param string $msgs 提示信息 1.为空 使用默认的（提示信息：操作成功，操作失败）2.成功了 （没有 “|” 提示信息：成功了，操作失败）
 * 3.|失败了（“|”在第一位，提示信息：操作成功，失败了） 4. 成功了|失败了（“|”在中间，提示信息：成功了，失败了）
 * 其中如果$data 数据中有error字段，会覆盖默认的操作失败， 优先次序   操作失败（默认）< $data['error'] < $msgs[1](函数参数传入)
 * @param string $type 类型，主要的用途
 * @return \think\response\Json
 */
function json_print($data, $msgs = '', $type = 'blog')
{
    if (empty($msgs)) {
        $msg[] = '操作成功';
        $msg[] = !empty($data['error']) ? $data['error'] : '操作失败';
    } elseif (strpos($msgs, '|') === false) {
        $msg[] = $msgs;
        $msg[] = !empty($data['error']) ? $data['error'] : '操作失败';
    } elseif (strpos($msgs, '|' === 0)) {
        $msg[] = '操作成功';
        $msg[] = substr($msgs, 1);
    } else {
        $msg = explode('|', $msgs);
    }

    if (empty($data) || isset($data['error'])) {
        $is_success = false;
    } else {
        $is_success = true;
    }

    $func = $type.'_print';
    $rt = $func($data, $msg, $is_success);
    return json($rt);
}

/**
 * layui_table_print 便捷操作
 * @param $data
 * @param string $msgs
 * @param string $type
 * @return \think\response\Json
 */
function json_print_layui($data, $msgs = '', $type = 'layui')
{
    return json_print($data, $msgs, $type);
}


// 博客系统默认的输出形式
function blog_print($data, $msgs, $is_success = true)
{
    if ($is_success) {
        $rt['status'] = 'success';
        $rt['msg'] = $msgs[0];
    } else {
        $rt['status'] = 'fail';
        $rt['msg'] = $msgs[1];
    }
    $rt['result'] = $data;
    return $rt;
}

// layui的输出形式
function layui_print($data, $msgs, $is_success = true)
{
    if ($is_success) {
        $rt['code'] = 0;
        $rt['msg'] = $msgs[0];
        if (isset($data['count'])) {
            $rt['count'] = $data['count'];
            $rt['data'] = $data['list'];
        } else {
            $rt['data'] = $data;
        }
    } else {
        $rt['code'] = 1;
        $rt['msg'] = $msgs[1];
        $rt['count'] = 0;
        $rt['data'] = [];
    }
    return $rt;
}


/**
 * 平级树
 * @param $data 所需数据
 * @param int $pid 父id
 * @param int $notId 排除的id
 * @param array $tree 返回的tree
 * @param int $depth 当前的深度
 * @return array
 */
function flat_tree($data, $pid = 0, $notId = -1, &$tree = [])
{
    // edit 时要排除自身及其子集
    foreach ($data as $item) {
        if ($item['pid'] == $pid && $item['id'] != $notId) {
            $tree[] = $item;
            flat_tree($data, $item['id'], $notId, $tree);
        }
    }
    return $tree;
}


/**
 * 等级树
 * @param $data
 * @param int $pid
 * @param int $notId
 * @param string $subName
 * @return array
 */
function tree_grade($data, $pid = 0, $notId = -1, $subName = 'children')
{
    $tree = [];
    foreach ($data as $key => $item) {
        if ($item['pid'] == $pid && $item['id'] != $notId) {
            $subData = $data;
            unset($subData[$key]);
            $item['value'] = $item['id'];
            $item[$subName] = tree_grade($subData, $item['id'], $notId, $subName);
            $tree[] = $item;
        }
    }
    return $tree;
}

// 面包屑
function crumbs($data, $pid, $sign = '>')
{
    $tree = flat_tree($data, $pid);
    return implode($sign, array_reverse($tree));
}


// 时间格式
function admin_date($time = null)
{
    if (is_null($time)) {
        $time = time();
    }
    return date('Y-m-d H:i:s', $time);
}



function db($table)
{
    $class = \think\Db::name($table);
    return $class;
}
